package copy.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import copy.com.R;
import copy.dto.DishDto;
import copy.pojo.Category;
import copy.pojo.Dish;
import copy.service.DishService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Set;

/**
 * @Author 小思
 * @Description //TODO
 * @Date $ $
 * @Param $
 * @return $
 **/

@RestController
@RequestMapping("/dish")
public class DishController {
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private DishService dishService;

    /**
     * 新增套餐调用查询菜品数据 参数传菜品分类category_id 建议用菜品实体去接收 扩展性好
     * 参数category_id 和status
     */
    @GetMapping("/list")
    public R<List<DishDto>> list(Dish dish) {
      List<DishDto>lists=  dishService.listDishWithFlavors(dish);
        return R.success(lists);
    }
    /**
     * 是put请求  对菜品数据的处理一个新增一个更新 不能复用  更新菜品数据和口味数据接口 保存口味数据的处理是先全部删除再添加
     * 修改菜品 下拉框加上图片上传下载 和最后的put请求保存菜品和口味
     */
    @PutMapping
    public R<String> update(@RequestBody DishDto dishDto) {
        //dish_1_1 新增和添加到数据库 都需要清理 缓存
//        redisTemplate.delete("dish_1_1");
        Set<String> keys = redisTemplate.keys("dish_*");
        if (keys != null) {
            redisTemplate.delete(keys);
        }
        dishService.updateDishWithFlavors(dishDto);
        return R.success("");
    }
    /**
     * 菜品修改 先查右侧分页 然后调用文件上传下载
     * ranhou然后此接口查出这条菜品数据包含口味数据即根据dishID查询dish数据
     * 最后调保存菜品接口
     */
    @GetMapping("/{id}")
    public R<DishDto> savedishFlavos(@PathVariable Long id) {
        DishDto dishDto = dishService.qWithFlavorsBydishId(id);
        return R.success(dishDto);
    }
    /**
     * 菜品分页查询 封装 菜品分类name字段
     */
    @GetMapping("/page")
    public R<Page> dishpage(int page, int pageSize,String name) {
        Page<DishDto> ipage = dishService.Ipage(page, pageSize, name);
        return R.success(ipage);
    }

    /**
     * 新增菜品 除图片上传下载
     * 还需查分类
     * 和保存
     */
    @PostMapping
    public R<String> AddDishFlavos(@RequestBody DishDto dishDto) {
        dishService.saveWithFlavors(dishDto);
        Set<String> keys = redisTemplate.keys("dish_*");
        if (keys != null) {
            redisTemplate.delete(keys);
        }
        return R.success("");
    }

    /**
     * 批量停售
     */
    @PostMapping("/status/0")
    public R<String> status0(@RequestParam List<Long> ids) {
        LambdaUpdateWrapper<Dish> qu = new LambdaUpdateWrapper<>();
        qu.set(Dish::getStatus, 0).
                in(Dish::getId, ids);
        dishService.update(qu);
        return R.success("");}
    /**
     * 批量起售
     */
    @PostMapping("/status/1")
    public R<String> status1(@RequestParam List<Long> ids) {
        LambdaUpdateWrapper<Dish> qus = new LambdaUpdateWrapper<>();
        qus.in(Dish::getId, ids).set(Dish::getStatus, 1);
        dishService.update(qus);
        return R.success("1");}

    /**
     * 批量删除 包含单个删除
     * http://localhost:8088/dish?ids=1907428991749361665
     * http://localhost:8088/dish?ids=1907428991749361665,1908383934681571330
     */
    @DeleteMapping
    public R<String> delete(@RequestParam List<Long> ids) {
        Set<String> keys = redisTemplate.keys("dish_*");
        if (keys != null) {
            redisTemplate.delete(keys);
        }
        dishService.removeByIds(ids);
        return R.success("");
    }
}
